/*
** $ 身份：嘞西类型.h $
** 炉啊的'西类型'函数
** 请参见炉啊.h中的版权声明
*
* 本人所用声母表: a啊 b哔 c西 d迪 e鹅 f弗 g哥 
* h喝 i艾 j鸡 k颗 l嘞 m摸 n恩
* o欧 p匹 q气 r日 s丝 t嚏 
* u由 v微 w屋 x斯 y医 z只
*
* 一些英文单词缩写,我的翻译大多来自;有道词典,谷歌翻译,百度.
* 一些术语实在不好翻译,所以就原封不动.
* 
*/

#ifndef 嘞西类型_喝
#define 嘞西类型_喝

#include "炉啊.h"

/*
** 警告：此处定义的功能不一定对应
** 与标准C ctype.h中的类似功能相同. 他们是
** 针对炉啊的特定需求进行了优化
*/
#if !defined(炉啊_用_西类型)

#if 'A' == 65 && '0' == 48
/* ASCII 情况: 可以使用自己的表; 更快,更固定 */
#define 炉啊_用_西类型	0
#else
/* 必须使用标准C ctype */
#define 炉啊_用_西类型	1
#endif

#endif

#if !炉啊_用_西类型	/* { */

#include <limits.h>

#include "嘞极限.h"

#define 阿尔法位	0
#define 数字位	1
#define 打印位	2
#define 空间位	3
#define 斯数字位	4


#define 口罩(哔)		(1 << (哔))

/*
** 将1加到印刻以允许索引-1 (只终) 
*/
#define 测试财产(西,匹)	(炉啊艾_西类型_[(西)+1] & (匹))

/*
**  '嘞阿尔法' (炉啊字母表) 和 '嘞阿尔法号码'  (炉啊字母号码) 都包含'_'
*/
#define 嘞是否嘞阿尔法(西)	测试财产(西, 口罩(阿尔法位))
#define 嘞是否嘞阿尔法号码(西)	测试财产(西, (口罩(阿尔法位) | 口罩(数字位)))
#define 嘞是否数字(西)	测试财产(西, 口罩(数字位))
#define 嘞是否空间(西)	测试财产(西, 口罩(空间位))
#define 嘞是否打印(西)	测试财产(西, 口罩(打印位))
#define 嘞是否斯数字(西)	测试财产(西, 口罩(斯数字位))

/*
**此  '嘞到降低'  仅适用于字母表印刻
*/
#define 嘞到降低(西)	((西) | ('A' ^ 'a'))

/* 两个另外的0和-1条目 (只终) */
炉啊艾_迪十二月(const 炉_字节 炉啊艾_西类型_[由印刻_最大 + 2];)

#else			/* }{ */

/*
** 使用标准C ctypes
*/
#include <ctype.h>


#define 嘞是否嘞阿尔法(西)	(isalpha(西) || (西) == '_')
#define 嘞是否嘞阿尔法号码(西)	(isalnum(西) || (西) == '_')
#define 嘞是否数字(西)	(isdigit(西))
#define 嘞是否空间(西)	(isspace(西))
#define 嘞是否打印(西)	(isprint(西))
#define 嘞是否斯数字(西)	(isxdigit(西))

#define 嘞到降低(西)	(tolower(西))

#endif			/* } */

#endif
